Field data

field_2023_provisional <- read_csv("field_data/2023_WLE_Weekly_Datashare_CSV.csv") %>% 
  mutate(across(where(is.character), ~ replace(., . %in% c("nd", "ns", "N/A", "NS", "ND"), NA)),
         across(where(is.character), ~ if_else(str_detect(., "<|>|=|\\*"), str_remove(., "<|>|=|\\*"), .)),
         across(where(is.character), ~ if_else(str_detect(., "bdl|BDL"), "0", .))) %>% 
  type_convert() %>% 
  mutate(Arrival_Time = hms::parse_hm(Arrival_Time),
         Departure_Time = hms::parse_hm(Departure_Time))
## Rows: 238 Columns: 26
## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
## Delimiter: ","
## chr (19): Date, Site, Sample_Depth_category, Arrival_Time, Departure_Time, S...
## dbl  (6): Station_Depth_m, Sample_Depth_m, Lat_deg, Long_deg, Wind_speed_kno...
## lgl  (1): Wave_Ht_ft
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## 
## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
## cols(
##   Date = col_character(),
##   Site = col_character(),
##   Sample_Depth_category = col_character(),
##   Arrival_Time = col_character(),
##   Departure_Time = col_character(),
##   Sky = col_character(),
##   Secchi_Depth_m = col_double(),
##   Temp_C = col_double(),
##   `SpCond_uScm-1` = col_double(),
##   `BeamAtten_m-1` = col_double(),
##   Transmiss_pct = col_double(),
##   `DO_mgL-1` = col_double(),
##   `PAR_uEcm-2s-1` = col_double(),
##   Turbidity_NTU = col_double(),
##   `Particulate_Microcystin_ugL-1` = col_double(),
##   `Dissolved_Microcystin_ugL-1` = col_double(),
##   `Extracted_PC_ugL-1` = col_double(),
##   `Total_cyanobacteria_genes_copiesmL-1` = col_double(),
##   `mycE_genes_copiesmL-1` = col_double()
## )
field_2024_provisional <- read_csv("field_data/2024_WLE_Weekly_Datashare_CSV.csv") %>% 
  mutate(across(where(is.character), ~ replace(., . %in% c("nd", "ns", "N/A", "NS", "ND"), NA)),
         across(where(is.character), ~ if_else(str_detect(., "<|>|=|\\*"), str_remove(., "<|>|=|\\*"), .)),
         across(where(is.character), ~ if_else(str_detect(., "bdl|BDL"), "0", .))) %>% 
  type_convert()
## Rows: 260 Columns: 25
## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (17): Date, Site, Sample_Depth_category, Sky, Secchi_Depth_m, Temp_C, S...
## dbl   (6): Station_Depth_m, Sample_Depth_m, Lat_deg, Long_deg, Wind_speed_ms...
## time  (2): Arrival_Time, Departure_Time
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## 
## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
## cols(
##   Date = col_character(),
##   Site = col_character(),
##   Sample_Depth_category = col_character(),
##   Sky = col_character(),
##   Secchi_Depth_m = col_double(),
##   Temp_C = col_double(),
##   `SpCond_uScm-1` = col_double(),
##   `BeamAtten_m-1` = col_double(),
##   Transmiss_pct = col_double(),
##   `DO_mgL-1` = col_double(),
##   `PAR_uEcm-2s-1` = col_double(),
##   Turbidity_NTU = col_double(),
##   `Particulate_Microcystin_ugL-1` = col_double(),
##   `Dissolved_Microcystin_ugL-1` = col_double(),
##   `Extracted_PC_ugL-1` = col_double(),
##   `Total_cyanobacteria_genes_copiesmL-1` = col_double(),
##   `mycE_genes_copiesmL-1` = col_double()
## )
field_2025_provisional <- read_csv("field_data/2025_WLE_Weekly_Datashare_CSV.csv") %>% 
  mutate(across(where(is.character), ~ replace(., . %in% c("nd", "ns", "N/A", "NS", "ND"), NA)),
         across(where(is.character), ~ if_else(str_detect(., "<|>|=|\\*"), str_remove(., "<|>|=|\\*"), .)),
         across(where(is.character), ~ if_else(str_detect(., "bdl|BDL"), "0", .))) %>% 
  type_convert() %>% 
  mutate(Departure_Time = hms::parse_hm(Departure_Time))
## Rows: 84 Columns: 27
## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (12): Date, Site, Sample_Depth_category, Departure_Time, Sky, Secchi_De...
## dbl  (14): Station_Depth_m, Sample_Depth_m, Lat_deg, Long_deg, Wind_speed_ms...
## time  (1): Arrival_Time
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## 
## ── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
## cols(
##   Date = col_character(),
##   Site = col_character(),
##   Sample_Depth_category = col_character(),
##   Departure_Time = col_time(format = ""),
##   Sky = col_character(),
##   Secchi_Depth_m = col_double(),
##   `Particulate_Microcystin_ugL-1` = col_double(),
##   `Dissolved_Microcystin_ugL-1` = col_double(),
##   `Total_cyanobacteria_genes_copiesmL-1` = col_double(),
##   `mycE_genes_copiesmL-1` = col_double(),
##   `DIC (uM)` = col_double(),
##   TALK = col_double()
## )
combined_field_data <- bind_rows(field_2023_provisional,field_2024_provisional,field_2025_provisional) %>% 
  mutate(Date = lubridate::mdy(Date),
         date_same_year = lubridate::`year<-`(Date, 2000),
         year = lubridate::year(Date)) %>% 
  rename(date = "Date",
         NOAA_Site = "Site",
         part_microcyst = "Particulate_Microcystin_ugL-1",
         ext_phyco = "Extracted_PC_ugL-1",
         chlorophyl = "Extracted_CHLa_ugL-1") %>% 
  filter(NOAA_Site %in% c("WE4","WE9","WE2","WE12"))

Bloom summary normalized across all years

Key bloom parameters (chlorophyll, phycocyanin, and particulate microcystin) from the complete weekly monitoring dataset are shown to approximate bloom characteristics for each year.

In this case, the parameter values were scaled across all years to obtain values on a similar scale for each parameter and highlight differences between bloom years. The y-axis position of sample points corresponds to Microcystis abundance in the metagenomes.

Bloom summary normalized by year

Key bloom parameters (chlorophyll, phycocyanin, and particulate microcystin) from the complete weekly monitoring dataset are shown to approximate bloom characteristics for each year.

In this case, the parameter values were scaled within years to obtain values on a similar scale and highlight differences throughout each bloom. The y-axis position of sample points corresponds to Microcystis abundance in the metagenomes.